﻿// MIT License
// 开源地址：https://gitee.com/co1024/AbcMvc
// Copyright (c) 2021-2022 1024
// Abc.Mvc=Furion+EF+SqlSugar+Pear layui admin.

namespace Abc.Base;

/// <summary>
/// System.Text.Json 扩展
/// </summary>
public static class TextJsonExtension
{
    /// <summary>
    /// 获取  System.Text.Json 默认设置
    /// </summary>
    /// <returns></returns>
    public static System.Text.Json.JsonSerializerOptions GetDefaultJsonSerializerOptions
    {
        get
        {
            var options = new JsonSerializerOptions
            {
                Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(UnicodeRanges.All),//设置虚拟化中文的时候不编码
                ReferenceHandler = ReferenceHandler.IgnoreCycles
            };
            return options;
        }
    }

    /// <summary>
    /// 序列化为Json字符串（System.Text.Json）
    /// </summary>
    /// <typeparam name="T">对象</typeparam>
    /// <param name="obj">序列化的对象</param>
    /// <returns></returns>
    public static string ToJson<T>(this T obj)
    {
        var result = System.Text.Json.JsonSerializer.Serialize(obj, GetDefaultJsonSerializerOptions);
        return result;
    }

    /// <summary>
    /// 反序列化为对象（System.Text.Json）
    /// </summary>
    /// <typeparam name="T">对象</typeparam>
    /// <param name="jsonStr">json字符串</param>
    /// <returns></returns>
    public static T? ToObj<T>(this string jsonStr)
    {
        if (string.IsNullOrWhiteSpace(jsonStr)) return default(T);
        return System.Text.Json.JsonSerializer.Deserialize<T>(json: jsonStr);
    }
}